package model

import (
	"fmt"
	"ginblog/utils"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/schema"
	"time"
)

var Db *gorm.DB
var Err error

func InitDb() {
	dsn := fmt.Sprintf("%s:%s@(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
		utils.DbUser,
		utils.DbPassWord,
		utils.DbHost,
		utils.DbPort,
		utils.DbName,
	)
	Db, Err = gorm.Open(mysql.Open(dsn), &gorm.Config{
		NamingStrategy: schema.NamingStrategy{
			SingularTable: true,
		},
	})

	if Err != nil {
		fmt.Println("数据库连接失败，请检查参数！", Err)
	}

	//自动迁移模型
	Db.AutoMigrate(
		&Blog{},
		&Admin{},
		&ArticleTag{},
		&Tag{},
		&Category{},
		&Article{},
		&Comment{},
		&Setup{},
		&Resources{},
		&CustomPage{},
	)

	sqlDB, err := Db.DB()

	if err != nil {
		fmt.Println("*sql.DB数据库连接失败！", err)
	}

	// SetMaxIdleConns 用于设置连接池中空闲连接的最大数量。
	sqlDB.SetMaxIdleConns(10)

	// SetMaxOpenConns 设置打开数据库连接的最大数量。
	sqlDB.SetMaxOpenConns(100)

	// SetConnMaxLifetime 设置了连接可复用的最大时间。
	sqlDB.SetConnMaxLifetime(10 * time.Second)
}
